package com.cennavi.bigdata.baotou.dao;

import com.alibaba.fastjson.JSONObject;
import com.mongodb.DBObject;

import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 * Created by zuoweiguang on 2016/9/30.
 */
public interface ViewDao {

    /**
     * 测试oracle
     */
    String testOracle();

    //根据表名获取 collection
//    DBCollection getCollection(String collectionName);

    /**
     * 获取路况数据
     * @param z
     * @param x
     * @param y
     * @return List<DBObject>
     */
    List<DBObject> getTraffic(int z, int x, int y);

    /**
     * 拥堵热点
     * @param url
     * @return String
     */
    String getCongestionHotspots(String url);

    /**
     * 获取道路名称
     * @param roadId
     * @return DBObject
     */
    JSONObject getRoadNameByRoadId(String roadId);

    //获取交通热点
    List<DBObject> getTrafficHeatPoint();

    /**
     * 获取交通管制数据
     * @param controlType
     * @param todayStartTime
     * @return List<DBObject>
     */
    List<DBObject> getTrafficControl(String controlType, Date todayStartTime);

    /**
     * 录入交通管制数据
     * @param jsonData
     * @return int
     */
    int insertTrafficControl(String jsonData);

    /**
     * 获取施工占道数据
     * @param todayStartTime
     * @return List<DBObject>
     */
    List<DBObject> getConstructionOccupation(Date todayStartTime);

    /**
     * 指数分析预警-区域指数预警
     * 根据区域类型查询对应exponent_region数据
     * @param regionType
     * @return List<DBObject>
     */
    List<DBObject> getExponentRegionByType(String regionType);

    /**
     * 查询当前商圈内的拥堵的rtic总数
     * @return int
     */
    int queryCongestionRticTotalByRegion(List<String> rticIdList);

    /**
     * 录入施工占道数据
     * @param jsonData
     * @return int
     */
    int insertConstructionOccupation(String jsonData);

    /**
     * 道路实时指数
     * @param roadIndexRTUrl
     * @return String
     */
    String getRoadIndexRT(String roadIndexRTUrl);

    /**
     * 行政区域实时指数
     * @param DCIndexRTUrl
     * @return String
     */
    String getDCIndexRT(String DCIndexRTUrl);

    /**
     * 热点指数
     * @param HotIndexRTUrl
     * @return String
     */
    String getHotIndexRT(String HotIndexRTUrl);

    /**
     * pattern数据
     * @param PatternUrl
     * @return String
     */
    Map<String, JSONObject> getPatternStatus(String PatternUrl);

    /**
     * 根据前端传来的像素坐标位置及缩放级别，查询对应的pattern数据
     * @param z
     * @param x
     * @param y
     * @return List<DBObject>
     */
    List<DBObject> getPattern(int z, int x, int y);

    /**
     * 辖区指数
     * @param teamIndexRTUrl
     * @return String
     */
    String getTeamIndexRT(String teamIndexRTUrl);

    /**
     * 历史年指数
     * @param dcIndexByYearUrl
     * @return String
     */
    String getDCIndexByYear(String dcIndexByYearUrl);

    /**
     * 历史月指数
     * @param dcIndexByMonthUrl
     * @return String
     */
    String getDCIndexByMonth(String dcIndexByMonthUrl);

    /**
     * 历史节假日指数
     * @param dcIndexByHoliUrl
     * @return String
     */
    String getDCIndexByHoli(String dcIndexByHoliUrl);

    /**
     * 交通安全态势分析- 获取常发拥堵路段排名数据
     * @param congestionRoadRankUrl
     * @return String
     */
    String getCongestionRoadRank(String congestionRoadRankUrl);

    /**
     * 交通安全态势分析- 获取常发拥堵路段统计数据
     * @param congestionRoadStatisUrl
     * @return String
     */
    String getCongestionRoadStatis(String congestionRoadStatisUrl);

    /**
     * 交通安全态势分析- 获取常发拥堵瓶颈时间分析数据
     * @param congestionRoadTimeUrl
     * @return String
     */
    String getCongestionRoadTime(String congestionRoadTimeUrl);

    /**
     * 交通监测系统-辖区道路指数数据
     * @param teamRoadIndexRTUrl
     * @return String
     */
    String getTeamRoadIndexRT(String teamRoadIndexRTUrl);

    /***
     *根据时间获取交通指数数据
     * @param time
     * return JSONObject
     */
    JSONObject getTrifficIndexRTByTime(Date time);

    /**
     * 获取时间范围内的交通指数数据
     * @param todayStartTime
     * @param todayEndTime
     * return List<JSONObject>
     */
    List<JSONObject> getTrifficIndexRTByTimeFrame(Date todayStartTime, Date todayEndTime);

    /**
     * 交通监测系统-交通事故监测数据
     * @return List<JSONObject>
     */
    List<JSONObject> getAccidentMonitoringByTimeFrame(Date todayStartTime, Date todayEndTime);

    /**
     * 交通监测系统-交通事故数量
     * @return int
     */
    int getAccidentStatisticsCountByTimeFrame(Date todayStartTime, Date todayEndTime);

    /**
     * 交通监测系统-交通拥堵数量
     * @return int
     */
    int getJamStatisticsCountByTimeFrame(Date todayStartTime, Date todayEndTime);

    /**
     * 交通监测系统-施工占道数量
     * @return int
     */
    int getConstructionCountByTimeFrame(Date todayEndTime);

    /**
     * 交通监测系统-交通管制数量
     * @return int
     */
    int getControlCountByTimeFrame(Date todayEndTime);

    /**
     * 交通监测系统- 获取交通警情数据
     * @param todayStartTime
     * @param todayEndTime
     * @param areaId
     * @param alarmType
     * @return String
     */
    List<JSONObject> getTrifficAlarmInfo(Date todayStartTime, Date todayEndTime, String areaId, String alarmType);

    /**
     * 交通监测系统-交通警情数量
     * @param todayStartTime
     * @param todayEndTime
     * @param alarmType
     * @return int
     */
    int getTrifficAlarmCount(String areaId, Date todayStartTime, Date todayEndTime, String alarmType);

    /**
     * 获取常发拥堵路段排名数据（含rtic拼接）
     * @param congestionRoadRankUrl
     * @return String
     */
    List<JSONObject> getCongestionRoadRank1(String congestionRoadRankUrl);

    /**
     * 根据路段类型获取对应的rticId
     * @param roadType
     * return String
     */
    List<String> getRoadType(String roadType);

    /**
     * 分析决策支持系统-运行态势分析-公路拥堵度
     * @param roadType
     * return String
     */
    String getDegreeOfCongestion(String roadType);

    /**
     * 根据请求拥堵热点接口后获取到的路段ID，到roadinfo表中查询对应的rticId
     * @return List<String>
     */
    List<String> getRticIdByRoadId(List<String> roadIdList);

    /**
     * 根据拿到的rticId，到traffic_status表中，获取linestring，并计算累计的长度
     * @return Double
     */
    Double getOutageRticLengthByRticId(List<String> rticIdList);

    /**
     * 计算rtic状态=3（拥堵）的所有rticId
     * @return List<String>
     */
    List<String> getRticIdCongestionByStatus(int status);

    /**
     * 计算拥堵rtic的总长度
     * @return Double
     */
    Double getCongestionRticTotalLength(List<String> rticIdList);

    /**
     * 卡口通行车数量接口
     * @param startDate
     * @param endDate
     * @param devIdList
     * @return String
     */
    String getKakouCarStatis(String startDate, String endDate, List<String> devIdList);

    /**
     * 获取卡口信息
     * @param roadType
     * @return List<DBObject>
     */
    List<DBObject> getKakouByMongo(String roadType);

    /**
     * 卡口通行车数量接口（monogo）
     * @param startDate
     * @param endDate
     * @param roadType
     * @return string
     */
    String getKakouCarStatisByMongo(String startDate, String endDate, String roadType);

    /**
     * 获取卡口信息接口
     * @param jcID
     * @return
     */
    List<String> getKakouCongestion(String jcID);

    JSONObject  getKakouCongestionAll(List<String> list);

    /**
     * 根据时间和卡口编号集合查询出卡口流量的历史峰值
     * @param timeSet
     * @param kkbhSet
     * @return
     */
    JSONObject getHisKakoullByBH(List<String> timeSet, Set<String> kkbhSet);

    /**
     * 获取所有段面的坐标信息
     * @return
     */
    JSONObject getDMCoorinates();
    /**
     * 获取城市主干道
     * @return
     */
    List<String> getMainRoadList();


    /**
     * 根据时间频率和卡口编号返回流量预警数据
     * @param tiem
     * @param kkbh
     * @return
     */
    String getKakouMessage(String tiem,String kkbh);


    /**
     * 查询出符合条件的卡口列表接口
     * @param dateType
     * @param flowStartTime
     * @param flowEndTime
     * @param flowRate
     * @param warminglevel
     * @return
     */
    String getKakouTabulation(String dateType,String flowStartTime,String flowEndTime,String flowRate,String warminglevel);

    /**
     * 流量预警弹框接口
     * @param dateType
     * @param flowStartTime
     * @param flowEndTime
     * @param flowRate
     * @param kkbh
     * @return
     */
    String getKakouTrafficWarning(String dateType,String flowStartTime,String flowEndTime,String flowRate,String kkbh);

    /**
     * 根据传入的道路名称或者模糊匹配字段
     * @param roadname
     * @return
     */
    String getRoadApplication(String roadname);

    /**
     * 获取道路信号数据接口
     * @param roadId
     * @param startTime1
     * @param startTime2
     * @param endTime1
     * @param endTime2
     * @return
     */
    String getRoadSignalData(String roadId, String startTime1, String startTime2, String endTime1, String endTime2);

    /**
     * 分析决策-运行态势分析-道路信息获取接口
     *
     * @return
     */
    String getGSXRoadInformation(String roadType);

    /**
     * 分析决策-运行态势分析-道路流量数据接口
     * @param deviceId
     * @return
     */
    String getDMFlowRateByDeviceId(String deviceId);


    List<Map<String,Object>> getRoadIndexMeger(String starttime, String endtime, String month,String type);

    List<Map<String,Object>> getAreaIndexmeger(String starttime, String endtime, String month,String type);

    List<Map<String,Object>> getRoadPredictBaseFromOracleWork(String yearMonth);

    List<Map<String,Object>> getRoadPredictBaseFromOracleNoWork(String yearMonth);

    List<Map<String,Object>> dataListRoadPredict(String roadid,String dateStr);

    List<String> listNoWorks();

    List<Map<String,Object>> getRoadLont();

    void insertTrafficFlowHour(String month);

    void insertTrafficFlowMin(String month);

    void insertTrafficFlowHourIndex1(String month);

    void insertTrafficFlowHourIndex2(String month);

    void insertTrafficFlowMinIndex1(String month);

    void insertTrafficFlowMinIndex2(String month);
}
